#include "printOut.h"

// 清屏函数
void ClearScreen() {
    printf("\033[H\033[J"); // 移动光标到左上角，清屏
}

/*
	参数：
		totalLine 整体行数
	功能：打印多行整体垂直居中
	注意：使用前调用一遍
*/
void ChangeCenter(int totalLine)
{
	// 获取终端的行数和列数
   	struct winsize w;
	ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
	int lines = w.ws_row;
	int cols = w.ws_col;

	// 计算文本需要打印的起始行，使文本垂直居中
	int start_line = (lines - totalLine) / 2;
	printf("\033[%d;%dH", start_line, 0);
}

/*
	功能：从终端顶部开始打印
*/
void ChangeTop()
{
	printf("\033[%d;%dH", 0, 0);
}

/*
	参数：
		text 打印文本
	功能：文本居中
*/
void PrintCenter(const char* text)
{
    // 获取终端的行数和列数
   	struct winsize w;
	ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
	int lines = w.ws_row;
	int cols = w.ws_col;

	// 计算文本需要打印的起始列，使文本水平居中
	int start_col = (cols - strlen(text)) / 2;
	printf("\033[%dG", start_col);
	printf("%s", text);
}

/*
	参数：
		text 打印文本
	功能：文本从行首打印
*/
void PrintHead(const char* text)
{
	printf("%s", text);
}

/*
	参数:
		int fromNum 显示方式
		int fGCNum	前景色
		int bGCNum	背景色
	功能：设置界面风格
*/
void SetColor(int fromNum, int fGCNum, int bGCNum)
{
	char from[20] = "";
	char fGC[20] = "";
	char bGC[20] = "";
    sprintf(from, "\33[%dm", fromNum);
    sprintf(fGC, "\33[%dm", fGCNum);
    sprintf(bGC, "\33[%dm", bGCNum);
	printf("%s%s%s", from, fGC, bGC);
}

/*
	参数：
		text 错误提示文本
	功能：错误提示
*/
void PrintWran(const char* text)
{
	ClearScreen();
	ChangeCenter(1);
	PrintCenter(text);
	sleep(1);
}

/*
	参数：duration 延迟时间
	功能：动态退出
*/
void ShowExit(int duration) 
{
	char text[100] = "";
	char point[100] = "";
	for (int i = 0; i < duration; ++i) 
	{
		point[2*i] = '.';
		point[2*i + 1] = '.';
    }
	point[strlen(point)] = '\0';

    for (int i = 0; i < duration; ++i) {
		ClearScreen();
		ChangeCenter(1);
		sprintf(text,"正在退出%s %d\n", point, duration - i);
		point[strlen(point) - 2] = '\0';
		PrintCenter(text);
        sleep(1); // 每秒更新一次
    }
	ClearScreen();
	ChangeCenter(1);
	PrintCenter("退出成功 欢迎下次使用！\n");
}